home *** CD-ROM | disk | FTP | other *** search
- // FloatFun.c
- // © Copyright 1985, 1987 Consulair Corporation, All rights reserved.
- // An example of using C floating point and QuickDraw.
-
- #include <sane.h>
- #include <window.h>
- #include <events.h>
-
- #define true 1
- #define false 0
-
- Rect rect;
- // static char getchar();
-
- #define MaxVertices 72
- #define slop 25
- #define width 150
- #define height 120
- #define leftBound ((512 - (2*width+slop))/2)
- #define topBound ((384 - (2*height+slop))/2-10)
-
- main()
- {
- Point center[4], points[MaxVertices];
- WindowPtr window[4];
- short x,y, i, j, iter, base, vertices;
- EventRecord event;
- extended radius, dx, dy, theta, increment, pi2;
- for (iter = 0; iter < 4; iter++)
- {
- rect.left = leftBound + (iter&1)*(width+slop);
- rect.right = rect.left+width;
- rect.top = topBound + (iter/2)*(height+slop);
- rect.bottom = rect.top+height;
- center[iter].v = (rect.bottom - rect.top)/2;
- center[iter].h = (rect.right - rect.left)/2;
- window[iter] = NewWindow(0, &rect, "\pFun Window", true, 0, -1, false, 0);
- }
- base = 6;
- while (!Button())
- {
- for (iter = 0; iter < 4; iter++)
- {
- if ((vertices = (iter+1)*base) > MaxVertices) vertices = MaxVertices;
- radius = (center[iter].h-center[iter].h/4+1) & -2;
- SetPort(window[iter]);
- getPoints(vertices, points, center[iter], radius);
- for (i = 0; i < vertices; i++)
- for (j = i+1; j < (i + vertices/2); j++)
- drawLine(points[i], points[j % vertices]);
- }
- base++;
- // if (getchar() == '.') ExitToShell();
- for (iter = 0; iter < 4; iter++)
- {
- SetPort(window[iter]);
- EraseRect(&(window[iter])->portRect);
- }
- }
- }
-
- drawline(p1, p2)
- Point p1, p2;
- {
- MoveTo(p1.h, p1.v);
- LineTo(p2.h, p2.v);
- }
-
- getPoints(npoints, pointVec, center, radius)
- short npoints;
- Point pointVec[], center;
- extended radius;
- {
- short i;
- extended increment = (2.*pi())/npoints;
- extended theta = 0;
-
- for (i = 0; i < npoints; i++)
- {
- pointVec[i].h = (center.h + radius*sin(theta)) + .5;
- pointVec[i].v = (center.v - radius*cos(theta)) + .5;
- theta += increment;
- }
- }